强化学习-Part 1:From MDP to DQN

在我的心目里强化学习一直是一个很难,但是重要性不是很高的知识点。说他重要性不高,其一是很少有“纯”的强化学习的项目,例如完成某个游戏,控制机器人。虽然 2017 年就有 AlphaGo 的轰动,但是我实践中也没有机会使用。即使在 ChatGPT 的出圈后,我简单了解了他所使用的 RLHF 技术,但是认知也是很肤浅的。其二,实践中很少会走到强化学习这一步,很多替代技术能用更简单的方式,更低的成本完成类似的任务,例如 DPO,SimPO。我自然也不会去用深究更复杂的 PPO。最后,可能是来自 Yann LeCun 有一个知名的 PPT 的认知,“纯”强化学习在深度学习的众多方向里面仅仅是一种点缀。

image.png

然而,随着近期强化学习在 LLM 领域做出了非常 promising 的结果(特指 Deepseek R1),甚至下一个阶段的 scaling law 都与之相关,让我不得不强行“入门”强化学习,系统性地学习。这里我们不谈 Agent,Robot 领域的强化学习的应用,仅从“调整”语言模型的角度看看,如何把强化学习系列技术人引入到 LLM 中,挖掘模型的潜力,从而做到极强的泛化性(甚至是推理能力)。然而在开始之前,我们不得不从强化学习的基础开始,试图揣测这种泛化性从何而来?或者这些强化学习算法是不是这轮推理模型 hyper 的能力来源?

知识参考来源:

image.png
总体思路:

决策问题建模

对决策建模使用马尔科夫决策过程来描述 MDP
MDP 的维基百科 中,把 Agent 与环境交互决策的过程建模为四元组

(S,A,Pa,Ra)

image.png
一个更具象的例子:
image.png
元组中的每个元素的含义如下

在参考资料 课程 的中的总结更清晰:
image.png
简而言之,我们可以把 MDP 涉及到的概念分为几类

PS: Model based 与 model free 的核心就是 Pa, Ra 相关的概率分布我们是否已知, 这里的已知是指全局的已知(整体的概率分布),而不是某一步的已知(例如 sample 一步看看)

在这个基本的定义的基础上,当我们进一步加入时间的维度 t,又会出现一些新的概念:

StAtRt+1,St+1At+1Rt+2,St+2At+2Rt+3,

关于 state value 与 action value 还有一些补充的说明

  1. 首先我们应该认知到他们都是“值”,即 Value,不是随机变量
  2. 他们两之间的关系如下:
E[Gt|St=s]vπ(s)=aE[Gt|St=s,At=a]qπ(s,a)π(a|s)qπ(s,a)=rp(r|s,a)r+γsp(s|s,a)vπ(s)

这种递归的关系也是求解他们的核心

注意建模中的细节:各种随机变量与分布告诉我们,整个决策模型充满了不确定性:策略 π 是不确定的,相同的 state 会得到不同的 action。奖励的也是不确定的,即使相同的 action,获得的 reward 也不一定相同。状态转移也是不确定,在某个状态下执行相同的 action 也会转移到不同的下一个状态

模型求解

求解上面的 MDP 模型找到最优策略就是强化学习的主要目标,如何求解模型呢?
强化学习的概念众多,各种求解方法让人眼花缭乱。不同的概念、求解方法用于不同的场景,往往基于不同的假设。
具体而言,我们可以从下面的角度思考假设:

另外一个考虑求解方法的主线是从算法本身思考,把模型求解分为三类主要的思路:

最后,一个很重要的角度是区分数据的来源,这个我们会在 Q-Learning 部分详细讨论

本篇文章主要讨论 value-based 的方法(policy-based 的方法和现代方法将在下一篇文章中讨论),他是基础的基础,需要展开一下

贝尔曼公式

根据 state value 的定义我们可以按照如下的公式展开

vπ(s)=E[GtSt=s]=E[Rt+γGt+1St=s]=E[RtSt=s]+γE[Gt+1St=s]=aπ(as)rp(rs,a)rmean of immediate rewards+γaπ(as)sp(ss,a)vπ(s)mean of future rewards,=aπ(as)[rp(rs,a)r+γsp(ss,a)vπ(s)],sS.

上面是贝尔曼公式的完整形式,下面简写是对最后一行的合并:

vπ(s)=rπ(s)+γspπ(s|s)vπ(s)

其中,

rπ(s)aπ(a|s)rp(r|s,a)rpπ(s|s)aπ(a|s)p(s|s,a)

我们有贝尔曼公式的矩阵形式:

vπ=rπ+γPπvπ

仔细观察上述推导的第一和第二行,包含一个递归的成分,因此

vπ(s)=E[R+γG|S=s],sS

可以写成下面的公式(Bellman expectation equation):

vπ(s)=E[R+γvπ(S)|S=s],sS.

上面是贝尔曼公式的 state value 形式(vπ(s) 相关),同理可以转化为 action value 的形式(qπ(s,a)

qπ(s,a)=EsP(|s,a)[r(s,a,s)+γEaπ(|s)[qπ(s,a)]],

贝尔曼最优公式

在决策过程中,假设我们使用的是全局最优策略(即我们的策略是选择 state/action value最大值进行行动),则贝尔曼公式转化为下面的贝尔曼最优公式
下面直接给出贝尔曼最优公式的 element wise 形式:

v(s)=maxπaπ(a|s)(rp(r|s,a)r+γsp(s|s,a)v(s)),sS=maxπaπ(a|s)q(s,a)sS

其中有一个重要的概念“最优策略”:最优策略可以理解为这个策略下,所有状态 s 的 state value vπ(s) 都大于等于其他策略下对应状态的 state value
总体来看,贝尔曼最优公式的含义是:最优策略下的 state value,然而最优策略又和 state value 有关,他们形成了一个奇妙的循环。

类似的对于 action value 的形式有

Q(s,a)=s,rp(s,rs,a)[r+γmaxaQ(s,a)].=E[Rt+1+γmaxaQ(St+1,a)St=s,At=a],s,a.

基于这个公式,我们可以迭代求出最优策略

值迭代与策略迭代算法(求解最优策略贝尔曼最优公式)

需要强调的是这个算法的前提是知道模型(model based)

Policy iteration algorithm Value iteration algorithm Comments
1) Policy: π0 N/A 随机初始化策略
2) Value: vπ0=rπ0+γPπ0vπ0 v0:=vπ0 随机初始化 vπ0
3) Policy: π1=arg maxπ(rπ+γPπvπ0) π1=arg maxπ(rπ+γPπv0)
Policy Update
其实是计算 action value - q 函数, The two policies are the same
4) Value: vπ1=rπ1+γPπ1vπ1
Policy Evaluation 每一步的更新都依赖当前策略下后续状态的价值估计
v1=rπ1+γPπ1v0
Value Update 每次更新直接使用后续状态的最优价值估计vk+1=maxaqk(s,a)
两个算法的核心区别,policy 这里是多次迭代直到 vπ1 收敛, vπ1v1 since vπ1vπ0
5) Policy: π2=arg maxπ(rπ+γPπvπ1)
Policy Improvement
π2=arg maxπ(rπ+γPπv1)
Policy Update
其实是计算 action value - q 函数,找最大值

Policy Iteration 和 Value Iteration 算法

vk+1=f(vk)=maxπ(rπ+γPπvk),k=1,2,3

值得注意的是:这里 Policy/Value Iteration 都是求解“最优策略”(和求解贝尔曼最优公式的目标一致),请注意下面这些概念的区别

蒙特卡洛方法(MC)

这种方式还 Model free 的方法,而且是通过完整的回合(episode)来估计值函数
当我们不知道状态转移的总体分布与奖励分布的时候,我们可以使用采样的方法来估计 state value。
MC 方法从算法上看是一个 Policy Iteration 算法。就是把上一节中的 Policy Evaluation 过程替换为使用 MC 采样来估计值函数。(需要注意的是,这里我们指得是直接估计 action value,与上一节先迭代计算 state value 再计算 action value 不同,因为这一步计算设计状态转移的分布和 Reward 的分布)

Basic MC vs MC Exploring Starts
基础算法中,在每一轮迭代 k, 我们是对每个 action value q(s,a) 中的每一个 s 和 a 的 pair,使用当前策略 πk 进行采样计算 average return。
在 Exploring Starts 方法中,在每一轮迭代 k, 为了避免(s, a)太多了,是随机 sample 一个 state-action pair (s0,a0) 作为一个起点(即 Exploring Start)。然后再根据当前策略 πk 生成动作,直到回合终止(如达到目标或失败)。

First-Visit MC vs Every-Visit MC
这是另外一个问题,主要考虑的是我们 sample 出来的某一条 episode 的路径中,假设某个状态出现了多次,我们应该如何处理的问题,First-visit 只计算出现的第一个 state-action pair 的 return, Every-Visit 则是计算每一个 state-action pair 的 return 取平均。

ε-greedy 策略:就是在我们 Policy Improvement,对策略进行微调,我们不是和之前一样使用 max action value 对应的 action 作为当前状态下的策略,而是增加一个探索的概率,去选择“非最优”的 action。公式如下(|A(st)| 是状态下动作的数量,a 是 action value 最大的策略)

π(a|st)={1|A(st)|1|A(st)|ϵ,a=a1|A(st)|ϵ,aa

下面是 MC Exploring Starts 结合 ε-greedy 策略的算法(使用 Every-Visit 提升 episode 利用率,以及 episode 从后向前遍历计算减少重复计算 )

image.png

可以看到 MC 算法的特点是:

思考:为什么上一节的 Policy/Value Iteration 没有使用ε-greedy?
答: 这里是 Model Free 的方法,概率不知道,需要探索性的随机策略,上一节中使用的是 Model-based 的方法,此时环境模型已知,可以直接计算所有动作的真实值,无需通过交互探索。直接使用 max 直接最大化动作值(确定性策略)

时序差分算法(TD Learning)

时序差分算法可能是强化学习里面最重要的算法了,我们在现实世界中往往既没有关于转移状态的分布,也没有完整的 sample 路径。有的只有“一步”的观测。这时候就是 TD 算法起作用了,他是一个迭代更新的(bootstrap)state/action value 的方法.

RM 算法

要理解 TD,需要一个数学基础 Robbins-Monro,Robbins-Monro 算法主要解决一个“随机近似”问题(Stochastic Approximation)即求解 E[G(w,X)]=0 的根的问题。
如何理解 E[G(w,X)]=0,直接要求找到参数 w,使得某个随机函数 G(w,X) 的期望等于零。对 RM 算法所要解决的问题,另一个常见的表述是求解 g(w)=0 的根的方法。此时我们不知道函数 g 的具体表达式,我们有的只是采样的数据 g~(w1),g~(w2)...

注意:理解这里两种表达是等价的,他们表达的是一个问题,因为我们假设 g(w) 的数据是随机变量采样来的,求每个样本的 g(w)=0 可以看作是总体期望为 0。

Robbins-Monro 的迭代更新公式如下:

wk+1=wkakg~(wk,ηk),k=1,2,3,

其中

对于算法有效性的一个直观的理解如下图
image.png

我们可以考察一个特别熟悉的算法随机梯度下降(SGD),其实他是 RM 算法推导出来的一个特例。在 SDG 中,我们优化的目标是最小化下面的 cost function

J(w)=E[f(w,X)]

求他的最小值,等价于求解梯度为 0

g(w)=wJ(w)=E[wf(w,X)]=0

即,求解 g(w)=0与上面 RM 算法解决的问题相同!

wk+1=wkakwJ(w)

这里的 ak 可以看作是学习率,就是我们在训练神经网络的时候常用的 SGD 算法

TD Learning for state value 算法

根据贝尔曼公式的期望形式结合 RM 算法,我们可以自然而然地推导出算法

vπ(s)=E[R+γG|S=s],sS

Bellman expectation equation:

vπ(s)=E[R+γvπ(S)|S=s],sS.

我们把等式右边移到左边后就转化为一个类似 g(w)=0 的问题,可以使用 RM 算法来求解

g(v(s))=v(s)E[R+γvπ(S)|s],

求解 g(v(s))=0

vk+1(s)=vk(s)αkg~(vk(s))=vk(s)αk(vk(s)[rk+γvπ(sk)]),k=1,2,3,

我们得到了一个利用采样数据迭代求解 state value 的公式:

补充:我们一般称上面公式中大括号里的内容为 TD Error,括号内减号后面的部分为 TD Target

TD Learning for action value - Sarsa 算法

如果我们使用上一小节的方法估计 state value,在不知道转移分布和 Reward 分布的情况下(即 Model free),我们是无法求出 Action Value 的,也就没有办法获得最优策略。因此,我们可以用下面的 Sarsa 算法。
下面是 Sarsa 算法(state-action-reward-state-action)求解 action value 结合策略提升来获取最优策略的算法:

image.png

对于 action value 的算法,和上面 state value 基本一致,有一些区别如下:

Sarsa 变体:Expected Sarsa

qt+1(st,at)=qt(st,at)αt(st,at)[qt(st,at)(rt+1+γE[qt(st+1,A)])]

Where

E[qt(st+1,A)])=aπt(a|st+1)qt(st+1,a)vt(st+1)

核心变化:

统一 Sarsa 与 MC: n-step Sarsa

上面的 Sarsa 算法我们只 sample 了一步的 reward rt+1,如果我们多走几步, 得到 (st,at,rt+1,st+1,at+1,,rt+n,st+n,at+n),就会得到 n-step Sarsa 算法,当我们一直 sample 走下去,可以看到这就是 MC 算法。

Gt(1)=Rt+1+γqπ(St+1,At+1),Gt(2)=Rt+1+γRt+2+γ2qπ(St+2,At+2),Gt(n)=Rt+1+γRt+2++γnqπ(St+n,At+n),Gt()=Rt+1+γRt+2+γ2Rt+3+

对比 TD Learning 和 MC 方法,他们都是 Model-free 的方式来求解 state/action value。他们有什么区别呢

Q-Learning

Q-Learning 也是一种 TD Learning 算法的应用,对比上面的算法,他的主要区别是,他直接估计 optiomal action values,即贝尔曼最优公式,因此他不需要像前面 Sarsa 那些先 Policy Evaluation 再 Policy Update/improvement,而是,直接估计出最优的 action value。

qt+1(st,at)=qt(st,at)αt(st,at)[qt(st,at)[rt+1+γmaxaAqt(st+1,a)]],

关键点如下:

PS:这里 Q,是 quality 的缩写,表示我们想要学习一个可以衡量(state, action) quality 的 table/function

理解 On-policy vs Off-Policy

核心是理解,Model-Free 的所有算法都是 follow one policy 生成采样的数据,无论是 MC 还是 TD 算法。

PS: Model-based 的方法不需要区分 On-policy / Off-Policy 因为他们不需要与环境交互获取样本。Model-based 使用动态规划方法,所有计算均基于模型的理论推导,与策略的交互无关

下面我们仔细分析一下 Q-Learning 是 off-policy 的说法,这里的确切含义是,Q-Learning 既可以是 on-policy,也可以是 off-policy 的(可以把 on-policy 看作 off-policy 的一种特殊情况),下面分别给出 on-policy 和 off-policy 版本的 Q-Learning 算法:
image.png

image.png
对比这两个算法,他们的 update q-value 部分完全相同,但是有一些核心的不同:

统一的视角

本节所介绍的 action value 相关的各种 TD update 公式可以统一看作:

qt+1(st,at)=qt(st,at)αt(st,at)[qt(st,at)q¯t],

他们都是在对 action value 的贝尔曼期望公式进行求解:

Algorithm Equation aimed to solve Expression of q¯t
Sarsa BE: qπ(s,a)=E[Rt+1+γqπ(St+1,At+1)|St=s,At=a] q¯t=rt+1+γqt(st+1,at+1)
n-step Sarsa BE: qπ(s,a)=E[Rt+1+γRt+2++γnqπ(st+n,at+n)|St=s,At=a] q¯t=rt+1+γrt+2++γnqt(st+n,at+n)
Expected Sarsa BE: qπ(s,a)=E[Rt+1+γEAt+1[qπ(St+1,At+1)]|St=s,At=a] q¯t=rt+1+γaπt(a|st+1)qt(st+1,a)
Q-learning BOE: q(s,a)=E[Rt+1+maxaq(St+1,a)|St=s,At=a] q¯t=rt+1+γmaxaqt(st+1,a)
Monte Carlo BE: qπ(s,a)=E[Rt+γRt+2+|St=s,At=a] q¯t=rt+1+γrt+2+

值函数近似与 DQN

Value Function 包括 state value function 和 action value function

值函数近似解决了什么问题?
上面我们讨论的迭代算法中,值迭代/策略迭代/时序差分算法这几个都假设了 v(s)q(s,a) 是个表格类型的数据,即状态空间是离散且有限的。所以我们才能根据 sample 的数据对某个 s 对应的 state/action value 进行 update。如何状态的个数是连续的,状态就有无限多个呢?
在上面的算法中,我们就不可能对所有的状态 s 的值都 update,只能更新某些状态的数据(这非常稀疏),这显然是有问题。
一个解决的方案是用一个函数来替代表格,我们的 update 作用到函数上,函数也给我们带来了更好的泛化性,缓解稀疏更新的问题。

State Value 函数近似

当我们假设 vπ(S) 是连续空间的,最直观的理解我们可以把他想象成:一个输入是状态,输出是 state value 的连续函数,典型的可以是一个线性方程,或者一个神经网络模型。
我们希望我们有个他的估计 v^(S,w) 能够逼近真实的 state value vπ(S) ,其中 w 是模型的参数。我们的目标就是求出这个参数。解题的思路是先确定一个 metric 函数(loss),然后优化,这里选择的是 MSE:

J(w)=E[(vπ(S)v^(S,w))2].

使用梯度下降可以用迭代更新的方式求出 w (见上文的 RM 算法)

wt+1=wt+αt(vπ(st)v^(st,wt))wv^(st,wt),

要 update w, 这个算法的核心问题是我们不知到里面的 state value 的真实值 vπ(st),这里的核心想法是“用近似的方法求出 vπ(st)”,回顾上文,近似 state value 的方法(Model-Free 的)有哪些?

这里理解 TD 算法, vπ(st) 的期望形式为 vπ(s)=E[R+γG|S=s],sS, 在已知 rt+1st+1 的情况下,可以展开为 vπ(st)=rt+1+γvπ(st+1)

image.png

Action Value 函数近似

类似的思想,当我应用到 Action Value 里面(结合 Sarsa 的 TD target 推导出来的)

wt+1=wt+αt[rt+1+γq^(st+1,at+1,wt)q^(st,at,wt)]wq^(st,at,wt).

上述的公式求解 action value q(s,a) 是 Policy Evaluation,结合 Policy Improvement 来求解最优策略的方法如下:
image.png
值近似版本的 Sarsa 算法和前面的 Sarsa 算法一样都是 on-Policy 的方法,需要一个具有探索性的策略
再次,当我们把上述方法应用到 Q-Learning 方法中(结合 Q-Learning 的 TD target 推导)

wt+1=wt+αt[rt+1+γmaxaA(st+1)q^(st+1,a,wt)q^(st,at,wt)]wq^(st,at,wt),

对于前面我们讲的 Q-Learning 提供了两个版本 on-Policy 和 off-Policy,
image.png

DQN

下面我们描述 off-policy 版本的 DQN 算法,这个是我们一般意义上讨论的 DQN

Deep Q-Learning 算法,首先就是基于上面的 Q-Learning with function approximation 引入了深度神经网络。分析前面的公式

wt+1=wt+αt[rt+1+γmaxaA(st+1)q^(st+1,a,wt)q^(st,at,wt)]wq^(st,at,wt),

这里我们用一个神经网络来实现 q^(st,at,wt) ,让模型输出值等于上式的 TD target(即训练的 ground truth)。就是在解决一个回归问题
image.png

PS:我们这里描述的情况的网络类似上图中间的结构,实际算法中使用的则是有图的结构,即模型的输入是状态 s, 输出是多个 action 的值。(action 的数量一般认为有限个)

训练神经网络的 loss 如下(MSE):

J(w)=E[(qπ(S,A)q^(S,A,w))2]J(w)=E[(R+γmaxaA(S)q^(S,a,w)q^(S,A,w))2],

这里我们称上面的 TD Error 为 “贝尔曼最优误差”(Bellman optimality error),这个名字的由来也很直觉,因为 action value 的值在期望意义上R+γmaxaA(S)q^(S,a,w) 相同。即

q(s,a)=E[Rt+1+γmaxaA(St+1)q(St+1,a)|St=s,At=a],s,a

现在的核心问题变成了如何求解上面的 Loss,我们由于模型的输出 target 值(TD target 部分)无法直接得到,这个值自身也依赖于 q^(st+1,a,wt),他们都依赖于参数 w
针对这个问题,先固定前面 td target 部分的参数 w,只计算后面的 q^(st,at,wt)。对于 Naive 版本的 DQN 算法而言,我们使用同一个网络来表示 q function,迭代更新 q 的值,即

DQN 的基础改进

DDQN

这种方法的一个问题是导致过度估计 (Over Estimation)。另外一个效果更好的思路是 double DQN(DDQN)
核心想法是:引入两个网络,固定一个网络训练另外一个网络,然后过一段时间就把参数同步到另外一个网络。

引入两个网络后,Loss 变为下面的形式:

J=E[(R+γmaxaA(S)q^(S,a,wT)q^(S,A,w))2],

另外一个简单的视角:一个 target network 是 main network 的 snapshot

经验回放

问题一:什么是经验回放?
其实非常简单,就是在我们根据策略 sample action 获得 reward,next State 之后,把这一组 turple 放入一个 buffer 里面。以后训练的时候每次都是从这个 buffer sample 一组 mini batch(新旧数据混合),使用这一组数据来训练模型
问题二:为什么需要经验回放?
上面的过程非常类似我们训练神经网络的时候准备数据集,为什么需要这样做呢?如果我们检索这个问题,会告诉我们这么做是为了“破坏数据的相关性”,要理解这个问题,需要关心下面几点:

Off-Policy DDQN 算法

下面是一个 off-policy 算法版本 DDQN(来自视频教程)
image.png
要点与问题:

graph LR

A[开始] --> B["初始化主网络参数 w 和目标网络参数 w_T"]
B --> B1["基于behavior策略生成数据放入buffer"]

B1 --> C["从回放缓冲区中采样小批次样本 (s, a, r, s')"]

C --> D["计算目标值 y_T = r + γ * maxₐ Q(s', a, w_T)"]

D --> E["计算主网络预测值 Q(s, a, w)"]

E --> F["计算损失函数 L = (y_T - Q(s, a, w))² 的平均值"]

F --> G["使用梯度下降法更新主网络参数 w"]

G --> H{"是否达到同步步数 C?"}

H -->|是| I["同步目标网络参数: w_T ← w"]

H -->|否| J{"是否达到最大训练次数或收敛?"}

I --> J

J -->|否| C

J -->|是| K[结束]

补充一个 DDQN 的伪代码:
计算输入: 传代轮数 T,状态特征维度 n,动作集 A,步长α,衰减因子γ,探索率ϵ,当前 Q 网络 Q,目标 Q 网络 Q′,批量梯度下降的基本样本数 m,目标 Q 网络参数更新频率 C。
输出: Q 网络参数

  1. 随机初始化所有的状态和动作对应的 Q 值 Q。随机初始化当前 Q 网络的所有参数 w,初始化目标 Q 网络 Q′的参数 w′ = w。清空经验回放的集合 D。
  2. for i from 1 to T, 进行迭代。
    a) 初始化 S 为当前时刻状态序列的第一个状态,获取其特征向量φ(S)
    b) 在 Q 网络中使用φ(S) 作为输入,得到 Q 网络的所有动作对应的 Q 值输出。用ε- 贪婪法在当前 Q 值输出中选择对应的动作 A
    c) 在环境中执行当前动作 A,得到新状态 S′对应的特征向量φ(S′) 和奖励 R,是否终止状态 is_end
    d) 将{φ(S), A, R, φ(S′), is_end}这五元组存入经验回放集合 D
    e) S = S′
    f) 从经验回放集合 D 中采样 m 个样本{{φ(Sj), Aj, Rj, φ(S′j), is_endj}, j = 1, 2, ..., m},计算当前目标 Q 值 yj:
yj={Rjif is_endj is trueRj+γQ(φ(Sj),argmaxa(Q(φ(Sj),a,w),w))if is_endj is false

g) 使用均方差损失函数

L=1mj=1m(yjQ(φ(Sj),Aj,w))2

通过神经网络的梯度反向传播来更新 Q 网络的所有参数 w
h) 如果 S′是终止状态,当前轮次终止,否则转到步骤 b)

注解:上述第二步的步骤和步骤中的 Q 值计算都需要通过已训练的 Q 网络计算得到。另外,实际应用中,为了计算较好的收敛,探索率需要随着迭代的进行逐渐减小。

总结

上面我们自底向上地(Down-Top)介绍了强化学习的基础知识:从对决策问题的建模开始,到第一个使用的深度强化学习算法 DQN。让我再 Top-Down 的整理一下这个问题。从 DQN 往回思考,他是什么?如何把握住他的核心思想,一个脉络是:

graph TD
    A["DQN (Deep Q-Network)"] --> B["使用神经网络替代 Q-Table 作为 Q-Function"]
    A --> C["MSE 损失函数 J(w) 构造"]
    A --> D["训练技巧:经验回放 && Double DQN"]
    
    C --> E["训练标签获取方法"]
    E --> F["Q-Learning (基于贝尔曼最优方程)"]
    E --> G["MC 算法 (需完整轨迹)"]
    
    F --> H["TD 算法 (时间差分)"]
    I["Sarsa (基于贝尔曼方程)"] --> H
    
    H --> J["贝尔曼最优方程 (Action Value 形式)"]
    J --> K["贝尔曼方程 (Action Value 形式)"]
  
    
    H --> L["随机近似/RM算法"]
    K --> M["强化学习问题建模 (MDP框架)"]
    
    
    style A fill:#f9f,stroke:#333
    style J fill:#bbf,stroke:#333
    style K fill:#bbf,stroke:#333